
package arffreader;

import java.io.*;

public class ArffCombineRows {    

    /**
     * Coje la columna indicada de la fila siguiente y la añade a la columna actual
     * en un fichero nuevo
     */
    public void AppendNextColumn(String inPath, String outPath, int nColumna) throws Exception{
        File archivo = null;
        FileReader fr = null;
        BufferedReaderArff br = null;
        HeaderCopier hCopier = new HeaderCopier();
        HeaderInserter hInserter = new HeaderInserter();
        String linea, lineaAnt;
        FileWriter fw = null;
        BufferedWriter bw = null;
        
        String newarch = outPath;

        String vstrings[] = null;

        try{
            archivo = new File(inPath);

            /*Fichero Lectura*/
            fr = new FileReader(archivo);
           

            //CopiaCabecera(br, bw);
            hCopier.CopiaCabecera(inPath, newarch);
            
            //Insertar nuevo atributo en la cabecera
            br = new BufferedReaderArff(fr);
            String attr = br.getAttrPos(nColumna);
            String tipo = br.getAttrTipoPos(nColumna);

            attr += "next";
            
            hInserter.addAttributte(attr, tipo, newarch);

            linea = br.readLine();
            lineaAnt = linea;
            
            boolean containsAttr = false;
            int nColumnaPeriodo = 0;
            
            if(br.containsAttr("numeroPeriodo")){
                containsAttr = true;
                nColumnaPeriodo = br.getPosAttr("numeroPeriodo");
            } 

           
            /* Se habre el fichero para añadir por el final */
            fw = new FileWriter(newarch,true);
            bw = new BufferedWriter(fw);
            
            bw.write(linea, 0, linea.length());
            bw.write(",");
            while((linea = br.readLine()) != null){
                vstrings = linea.split(",");
                /* Si la linea siguiente pertenece a otro periodo
                   se mantiene la columna de la linea anterior*/
                if (containsAttr && "1".equals(vstrings[nColumnaPeriodo])) {
                    vstrings = lineaAnt.split(",");
                    bw.write(vstrings[nColumna]);
                } 
                else {
                    bw.write(vstrings[nColumna]);
                }
                bw.write("\n");
                bw.write(linea, 0, linea.length());
                bw.write(",");
                lineaAnt = linea;
            }
            /* Para que no quede el hueco */
            bw.write(vstrings[nColumna]);
            bw.write("\n");
        }
        catch(Exception e){
            throw e;
        }
        finally{
            bw.close();
            br.close();
        }
    }
}
